package br.ufrj.dcc.ad.worker;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.log4j.Logger;

import br.ufrj.dcc.ad.log.LoggerFactory;
import br.ufrj.dcc.ad.systems.Controlador;

/***
 * Essa thread fica lendo o console atrás de comandos.
 * É útil caso queira rodar a simulação por tempo indeterminado.
 * Em especial o comando shutdown apenas para as iterações.
 * Permanecendo o cálculo das métricas.
 * @author wakim
 */
public class ConsoleWorker extends Thread {
	private Logger logger = LoggerFactory.getLogger(LoggerFactory.Type.TIMED_STDOUT);
	private Controlador controlador;
	
	public ConsoleWorker(Controlador controlador) {
		this.controlador = controlador;
	}
	@SuppressWarnings("deprecation")
	@Override
	public void run() {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		
		String linha = null;
		Command comando = null;
		
		try {
			while((linha = reader.readLine()) != null) {
				try {
					comando = Command.valueOf(linha.toUpperCase());
					if(comando != null) {
						switch(comando) {
							case SHUTDOWN:
								logger.info("Shutdown command is being processed");
								controlador.shutdown();
							return;
						}
					}
				} catch (IllegalArgumentException e) {
					logger.error("Comando " + linha + " inválido !");
				}
			}
		} catch (IOException e) {
			logger.error("Erro", e);
		}
	}
}
